package com.example.demo.common;

import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.util.UUID;

public class PasswordUtils {
    //1. 加盐并生成密码
    public static String encrypt(String password){
        //盐值
        String salt= UUID.randomUUID().toString().replace("-",""); //32位盐值
        //生成加盐后密码
        String saltPassword= DigestUtils.md5DigestAsHex((salt+password).getBytes());
        //生成最终密码(保存到数据库中的密码，32位盐值+$+32位加盐之后的密码)
        String finalPassword=salt+"$"+saltPassword;
        return finalPassword;
    }
    //2.生成加盐的密码（重载
    public static String encrypt(String password,String salt){
        //生成加盐密码
        String saltPassword= DigestUtils.md5DigestAsHex((salt+password).getBytes());
        //生成最终密码
        String finalPassword=salt+"$"+saltPassword;
        return finalPassword;
    }
    //3.验证密码
    //inputPassword为用户输入明文密码
    //finalPassword为数据库保存的密码
    public static boolean check(String inputPassword,String finalPassword){
        if(StringUtils.hasLength(inputPassword) && StringUtils.hasLength(finalPassword) && finalPassword.length()==65){
            //得到盐值
            String salt=finalPassword.split("\\$")[0];
            // 进行加密得到相应的密码
            String confirmPassword=encrypt(inputPassword,salt);
            //对比两个密码是否相同
            return confirmPassword.equals(finalPassword);
        }
        return false;
    }
}
